package com.istabs;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import com.istabs.beans.Establecimiento;
import com.istabs.services.DirectorioService;

public class ListaEstablecimientosPorTipoActivity extends ListActivity {
	private Establecimiento[] establecimientos;
	private TipoEstablecimientoAdapter tipoEstablecimientoAdapter;
	private ProgressDialog dialog;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lista_establecimientos);
		DirectorioService service = new DirectorioService();
		try {
			Object[] serializableExtra = (Object[]) this.getIntent()
					.getSerializableExtra("establecimientos");
			this.establecimientos = new Establecimiento[serializableExtra.length];
			for (int i = 0; i < serializableExtra.length; i++) {
				this.establecimientos[i] = (Establecimiento) serializableExtra[i];
			}
			tipoEstablecimientoAdapter = new TipoEstablecimientoAdapter(this,
					R.layout.directorio_item,
					R.id.txtNombreCategoriaEstablecimiento, establecimientos);
			setListAdapter(tipoEstablecimientoAdapter);

			final EditText filterEditor = (EditText) findViewById(R.id.editFilter);

			// Add a listener to the EditText that will update the filter.
			filterEditor.addTextChangedListener(new TextWatcher() {

				public void onTextChanged(CharSequence s, int start,
						int before, int count) {
					updateText();
				}

				public void beforeTextChanged(CharSequence s, int start,
						int count, int after) {
					updateText();
				}

				public void afterTextChanged(Editable s) {
					updateText();
				}

				private void updateText() {
					// Update the filter according to the contents of the field.
					tipoEstablecimientoAdapter.getFilter().filter(
							filterEditor.getText().toString());
				}
			});

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private class TipoEstablecimientoAdapter extends
			ArrayAdapter<Establecimiento> {

		public TipoEstablecimientoAdapter(Context context, int layoutId,
				int textViewResourceId, Establecimiento[] objects) {
			super(context, layoutId, textViewResourceId, objects);
			// TODO Auto-generated constructor stub
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = super.getView(position, convertView, parent);
			TextView tv = (TextView) view
					.findViewById(R.id.txtNombreCategoriaEstablecimiento);
			tv.setText(getItem(position).getNombre());
			return view;
		}
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		final RequestTask t = new RequestTask();
		dialog = ProgressDialog.show(this, "Istabs",
				"Cargando.\n Por favor espere...", true, true,
				new OnCancelListener() {

					public void onCancel(DialogInterface dialog) {
						t.cancel(true);
					}
				});
		t.execute(tipoEstablecimientoAdapter.getItem(position).getId());

	}

	private class RequestTask extends
			AsyncTask<Integer, Integer, Establecimiento> {
		private Intent intent;

		protected Establecimiento doInBackground(Integer... ids) {
			DirectorioService service = new DirectorioService();
			try {
				intent = new Intent(ListaEstablecimientosPorTipoActivity.this,
						DetalleEstablecimientoActivity.class);
				return service.obtenerEstablecimiento(ids[0],
						Establecimiento.class);

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}

		}

		protected void onProgressUpdate(Integer... progress) {

		}

		protected void onPostExecute(Establecimiento result) {
			if (result != null) {

				intent.putExtra("establecimiento", result);
				startActivity(intent);
				dialog.dismiss();
			} else {
				dialog.dismiss();
				// prepare the alert box
				AlertDialog.Builder alertbox = new AlertDialog.Builder(
						ListaEstablecimientosPorTipoActivity.this);
				// set the message to display
				alertbox.setMessage("Error al cargar los eventos. Intente mas tarde");
				alertbox.show();
			}

		}
	}

}